package cn.doitedu.kafka.day01

import java.time.Duration
import java.util
import java.util.Properties

import org.apache.kafka.clients.consumer.{ConsumerRecord, KafkaConsumer}
import org.apache.kafka.common.serialization.{StringDeserializer, StringSerializer}


/**
 * Kafka的消费者
 */
object ConsumerDemo1 {

  def main(args: Array[String]): Unit = {

    val properties = new Properties()
    //指定broker地址
    properties.setProperty("bootstrap.servers", "node-1.51doit.cn:9092,node-2.51doit.cn:9092,node-3.51doit.cn:9092")
    //指定key反序列化方式
    properties.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    //指定value反序列化方式
    properties.setProperty("value.deserializer", classOf[StringDeserializer].getName) // 两种写法都行
    //指定消费者组ID
    properties.setProperty("group.id", "g1111")
    //从头开始消费
    //earliest：从头开始 --from-beginning
    //latest:从消费者启动之后
    properties.setProperty("auto.offset.reset","earliest") //[latest, earliest, none]

    //创建KafkaConsumer，并关联properties
    val consumer = new KafkaConsumer[String, String](properties)

    val topics: util.List[String] = util.Arrays.asList("test")
    //订阅指定的一个或多个topic
    consumer.subscribe(topics)

    //不停地循环
    while (true) {
      //拉取数据，返回的是consumerRecords，是Iterable
      //如果拉取到一个批次数据，立即返回，如果没有拉取到新的数据，最多等待值的时间
      //println(666)
      val consumerRecords = consumer.poll(Duration.ofSeconds(10))
      //使用scala的for循环遍历
      import scala.collection.JavaConverters._
      for (record <- consumerRecords.asScala) {
        println(record)
      }
    }

    //consumer.close()

  }
}
